package com.seckill.service;

import com.seckill.dto.Exposer;
import com.seckill.dto.SeckillExecution;
import com.seckill.entity.Seckill;
import com.seckill.exception.RepeatSecKillException;
import com.seckill.exception.SeckillCloseException;
import com.seckill.exception.SeckillException;

import java.util.List;

/**
 * 业务接口:站在"使用者"角度设计接口,3个方面
 * 1. 方法定义粒度
 * 2. 参数(简练,直接)
 * 3. 返回类型
 * Created by chengweixin on 2017/4/25.
 */
public interface SeckillService {

    /**
     * 查询所有秒杀商品
     *
     * @return
     */
    List<Seckill> getSeckillList();

    /**
     * 返回某个秒杀商品
     *
     * @param seckillId
     * @return
     */
    Seckill getSeckill(long seckillId);

    /**
     * 秒杀开启时:秒杀接口地址,
     * 否则输出系统时间和秒杀时间
     *
     * @param seckillId
     */
    Exposer exportSeckillUrl(long seckillId);

    /**
     * 执行秒杀操作
     * @param seckillId
     * @param userPhone
     * @param md5
     */
    SeckillExecution executeSeckill(long seckillId, long userPhone, String md5)
            throws SeckillException,SeckillCloseException,RepeatSecKillException;

}
